home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- *
- * NSSDC/CDF Quick Start Test Program (INTERNAL interface/C).
- *
- * Version 1.4, 29-Feb-92, ST Systems (STX)
- *
- * Modification history:
- *
- * V1.0 27-May-91, J Love Original version (for CDF V2.1).
- * V1.1 25-Jun-91, J Love Renamed CDF for portability.
- * V1.2 2-Aug-91, J Love Use 'Exit'/'ExitBAD'. Use 'CDFlib'.
- * V1.3 24-Oct-91, J Love Modified for IBM-PC port.
- * V1.4 28-Feb-92, J Love CDF V2.2.
- *
- ******************************************************************************/
-
- #include <stdio.h>
-
- #include "cdfdist.h"
-
- #define N_DIMS 2
- #define DIM_0_SIZE 2
- #define DIM_1_SIZE 3
-
-
- #define stop(message) { \
- printf ("OOPS (%s)\n", message); \
- ExitBAD; \
- }
-
- main ()
- {
- CDFid id;
- CDFstatus status;
- long dim_n;
- static long encoding = NETWORK_ENCODING;
- static long actual_encoding = NETWORK_ENCODING;
- static long majority = ROW_MAJOR;
- static long numDims = N_DIMS;
- static long dimSizes[N_DIMS] = { DIM_0_SIZE, DIM_1_SIZE };
- static long var1DataType = { CDF_INT4 };
- static long var2DataType = { CDF_REAL4 };
- long var1DataType_out, var2DataType_out;
- static long var1NumElements = { 1 };
- static long var2NumElements = { 1 };
- long var1NumElements_out, var2NumElements_out;
- long var1Num_out, var2Num_out;
- static long var1Values[DIM_0_SIZE][DIM_1_SIZE] = { 1, 2, 3, 4, 5, 6 };
- static float var2Values[DIM_0_SIZE][DIM_1_SIZE] = { 1., 2., 3., 4., 5., 6. };
- long indices[N_DIMS];
- static long recNum = { 0 };
- long var1Value_out;
- float var2Value_out;
- static long recStart = { 0 };
- static long recCount = { 1 };
- static long recInterval = { 1 };
- static long counts[N_DIMS] = { DIM_0_SIZE, DIM_1_SIZE };
- static long intervals[N_DIMS] = { 1, 1 };
- long var1Buffer_out[DIM_0_SIZE][DIM_1_SIZE];
- float var2Buffer_out[DIM_0_SIZE][DIM_1_SIZE];
- long attrNum_out;
- static long entryNum = { 2 };
- long maxEntry_out;
- static long attrScope = { GLOBAL_SCOPE_ASSUMED };
- long attrScope_out;
- static long new_attrScope = { GLOBAL_SCOPE };
- static long attrDataType = { CDF_INT4 };
- long attrDataType_out;
- static long attrNumElements = { 1 };
- long attrNumElements_out;
- static long attrValue = { 1 };
- long attrValue_out;
- long encoding_out;
- long majority_out;
- long numDims_out;
- long dimSizes_out[N_DIMS];
- long maxRec_out;
- long numVars_out;
- long numAttrs_out;
- long version_out;
- long release_out;
- long increment_out;
- char subincrement_out;
-
- long x0, x1, x;
-
- static long var1RecVariance = { VARY };
- static long var2RecVariance = { VARY };
- long var1RecVariance_out, var2RecVariance_out;
- static long var1DimVariances[N_DIMS] = { VARY, VARY };
- static long var2DimVariances[N_DIMS] = { VARY, VARY };
- long var1DimVariances_out[N_DIMS], var2DimVariances_out[N_DIMS];
-
- static char var1Name[] = "VAR1a";
- static char var2Name[] = "VAR2a";
- static char new_var1Name[] = "VAR1b";
- static char new_var2Name[] = "VAR2b";
- char var1Name_out[CDF_VAR_NAME_LEN+1],
- var2Name_out[CDF_VAR_NAME_LEN+1];
- static char attrName[] = "ATTR1";
- static char new_attrName[] = "ATTR2";
- char attrName_out[CDF_ATTR_NAME_LEN];
- char CopyRightText[CDF_COPYRIGHT_LEN+1];
- char errorText[CDF_STATUSTEXT_LEN+1];
-
- /*****************************************************************************/
-
- printf ("\n\nTesting Internal/C interface...\n\n");
-
- /******************************************************************************
- * Create CDF.
- ******************************************************************************/
-
- status = CDFlib (CREATE_, CDF_, "QST2IC", numDims, dimSizes, &id,
- PUT_, CDF_ENCODING_, encoding,
- CDF_MAJORITY_, majority,
- CDF_FORMAT_, SINGLE_FILE,
- NULL_);
-
- if (status < CDF_OK) {
- if (status == CDF_EXISTS) {
- status = CDFlib (OPEN_, CDF_, "QST2IC", &id,
- NULL_);
- if (status < CDF_OK) stop ("1.0");
-
- status = CDFlib (SELECT_, CDF_, id,
- DELETE_, CDF_,
- NULL_);
- if (status < CDF_OK) stop ("1.1");
-
- status = CDFlib (CREATE_, CDF_, "QST2IC", numDims, dimSizes, &id,
- PUT_, CDF_ENCODING_, encoding,
- CDF_MAJORITY_, majority,
- CDF_FORMAT_, SINGLE_FILE,
- NULL_);
- if (status < CDF_OK) stop ("1.2");
- }
- else
- stop ("1.3");
- }
-
- /******************************************************************************
- * Create variables.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- CREATE_, VAR_, var1Name, var1DataType, var1NumElements,
- var1RecVariance, var1DimVariances,
- &var1Num_out,
- VAR_, var2Name, var2DataType, var2NumElements,
- var2RecVariance, var2DimVariances,
- &var2Num_out,
- NULL_);
- if (status < CDF_OK) stop ("2.0");
-
- /******************************************************************************
- * Close CDF.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- CLOSE_, CDF_,
- NULL_);
- if (status < CDF_OK) stop ("3.0");
-
- /******************************************************************************
- * Reopen CDF.
- ******************************************************************************/
-
- status = CDFlib (OPEN_, CDF_, "QST2IC", &id,
- NULL_);
- if (status < CDF_OK) stop ("4.0");
-
- /******************************************************************************
- * Delete CDF.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- DELETE_, CDF_,
- NULL_);
- if (status < CDF_OK) stop ("5.0");
-
- /******************************************************************************
- * Create CDF again (previous delete will allow this).
- ******************************************************************************/
-
- status = CDFlib (CREATE_, CDF_, "QST2IC", numDims, dimSizes, &id,
- PUT_, CDF_ENCODING_, encoding,
- CDF_MAJORITY_, majority,
- CDF_FORMAT_, SINGLE_FILE,
- NULL_);
- if (status < CDF_OK) stop ("6.0");
-
- /******************************************************************************
- * Create variables.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- CREATE_, VAR_, var1Name, var1DataType, var1NumElements,
- var1RecVariance, var1DimVariances,
- &var1Num_out,
- VAR_, var2Name, var2DataType, var2NumElements,
- var2RecVariance, var2DimVariances,
- &var2Num_out,
- NULL_);
- if (status < CDF_OK) stop ("7.0");
-
- /******************************************************************************
- * PUT to variables.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- CDF_RECNUMBER_, recNum,
- NULL_);
- if (status < CDF_OK) stop ("8.0");
-
- for (x0 = 0; x0 < DIM_0_SIZE; x0++)
- for (x1 = 0; x1 < DIM_1_SIZE; x1++)
- {
- indices[0] = x0;
- indices[1] = x1;
- status = CDFlib (SELECT_, CDF_, id,
- CDF_DIMINDICES_, indices,
- VAR_, var1Num_out,
- PUT_, VAR_DATA_, &var1Values[x0][x1],
- SELECT_, VAR_, var2Num_out,
- PUT_, VAR_DATA_, &var2Values[x0][x1],
- NULL_);
- if (status < CDF_OK) stop ("8.1");
- }
-
- /******************************************************************************
- * GET from the variable.
- ******************************************************************************/
-
- for (x0 = 0; x0 < DIM_0_SIZE; x0++)
- for (x1 = 0; x1 < DIM_1_SIZE; x1++)
- {
- indices[0] = x0;
- indices[1] = x1;
- status = CDFlib (SELECT_, CDF_, id,
- CDF_DIMINDICES_, indices,
- VAR_, var1Num_out,
- GET_, VAR_DATA_, &var1Value_out,
- SELECT_, VAR_, var2Num_out,
- GET_, VAR_DATA_, &var2Value_out,
- NULL_);
- if (status < CDF_OK) stop ("9.0");
-
- if (var1Value_out != var1Values[x0][x1]) stop ("9.1");
- if (var2Value_out != var2Values[x0][x1]) stop ("9.2");
- }
-
- /******************************************************************************
- * HyperPUT to the variable.
- ******************************************************************************/
-
- for (x0 = 0; x0 < DIM_0_SIZE; x0++)
- for (x1 = 0; x1 < DIM_1_SIZE; x1++) {
- var1Values[x0][x1] = -var1Values[x0][x1];
- var2Values[x0][x1] = -var2Values[x0][x1];
- }
-
- indices[0] = 0;
- indices[1] = 0;
-
- status = CDFlib (SELECT_, CDF_, id,
- CDF_RECNUMBER_, recStart,
- CDF_RECCOUNT_, recCount,
- CDF_RECINTERVAL_, recInterval,
- CDF_DIMINDICES_, indices,
- CDF_DIMCOUNTS_, counts,
- CDF_DIMINTERVALS_, intervals,
- VAR_, var1Num_out,
- PUT_, VAR_HYPERDATA_, var1Values,
- SELECT_, VAR_, var2Num_out,
- PUT_, VAR_HYPERDATA_, var2Values,
- NULL_);
- if (status < CDF_OK) stop ("10.0");
-
- /******************************************************************************
- * HyperGET from variable.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- CDF_RECNUMBER_, recStart,
- CDF_RECCOUNT_, recCount,
- CDF_RECINTERVAL_, recInterval,
- CDF_DIMINDICES_, indices,
- CDF_DIMCOUNTS_, counts,
- CDF_DIMINTERVALS_, intervals,
- VAR_, var1Num_out,
- GET_, VAR_HYPERDATA_, var1Buffer_out,
- SELECT_, VAR_, var2Num_out,
- GET_, VAR_HYPERDATA_, var2Buffer_out,
- NULL_);
- if (status < CDF_OK) stop ("11.0");
-
- for (x0 = 0; x0 < DIM_0_SIZE; x0++)
- for (x1 = 0; x1 < DIM_1_SIZE; x1++) {
- if (var1Buffer_out[x0][x1] != var1Values[x0][x1]) stop ("11.1");
- if (var2Buffer_out[x0][x1] != var2Values[x0][x1]) stop ("11.2");
- }
-
- /******************************************************************************
- * Create attribute.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- CREATE_, ATTR_, attrName, attrScope, &attrNum_out,
- NULL_);
- if (status < CDF_OK) stop ("12.0");
-
- /******************************************************************************
- * PUT to attribute.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- ENTRY_, entryNum,
- PUT_, ENTRY_DATA_, attrDataType, attrNumElements, &attrValue,
- NULL_);
- if (status < CDF_OK) stop ("13.0");
-
- /******************************************************************************
- * GET from attribute.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- GET_, ENTRY_DATA_, &attrValue_out,
- NULL_);
- if (status < CDF_OK) stop ("14.0");
-
- /******************************************************************************
- * Get CDF documentation.
- ******************************************************************************/
-
- status = CDFlib (GET_, LIB_VERSION_, &version_out,
- LIB_RELEASE_, &release_out,
- LIB_INCREMENT_, &increment_out,
- LIB_subINCREMENT_, &subincrement_out,
- LIB_COPYRIGHT_, CopyRightText,
- NULL_);
- if (status < CDF_OK) stop ("15.0");
-
- printf ("CDF V%ld.%ld.%ld%c\n", version_out, release_out, increment_out,
- subincrement_out);
- printf ("%s\n", CopyRightText);
-
- /******************************************************************************
- * Inquire CDF.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- GET_, CDF_NUMDIMS_, &numDims_out,
- CDF_DIMSIZES_, dimSizes_out,
- CDF_ENCODING_, &encoding_out,
- CDF_MAJORITY_, &majority_out,
- CDF_MAXREC_, &maxRec_out,
- CDF_NUMVARS_, &numVars_out,
- CDF_NUMATTRS_, &numAttrs_out,
- NULL_);
- if (status < CDF_OK) stop ("16.0");
-
- if (numDims_out != numDims) stop ("16.1");
- for (x = 0; x < N_DIMS; x++)
- if (dimSizes_out[x] != dimSizes[x]) stop ("16.2");
- if (encoding_out != actual_encoding) stop ("16.3");
- if (majority_out != majority) stop ("16.4");
- if (maxRec_out != 0) stop ("16.5");
- if (numVars_out != 2) stop ("16.6");
- if (numAttrs_out != 1) stop ("16.7");
-
- /******************************************************************************
- * Rename variables.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- VAR_NAME_, var1Name,
- PUT_, VAR_NAME_, new_var1Name,
- SELECT_, VAR_NAME_, var2Name,
- PUT_, VAR_NAME_, new_var2Name,
- NULL_);
- if (status < CDF_OK) stop ("17.0");
-
- /******************************************************************************
- * Inquire variable.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- VAR_, var1Num_out,
- GET_, VAR_NAME_, var1Name_out,
- VAR_DATATYPE_, &var1DataType_out,
- VAR_NUMELEMS_, &var1NumElements_out,
- VAR_RECVARY_, &var1RecVariance_out,
- VAR_DIMVARYS_, var1DimVariances_out,
- SELECT_, VAR_, var2Num_out,
- GET_, VAR_NAME_, var2Name_out,
- VAR_DATATYPE_, &var2DataType_out,
- VAR_NUMELEMS_, &var2NumElements_out,
- VAR_RECVARY_, &var2RecVariance_out,
- VAR_DIMVARYS_, var2DimVariances_out,
- NULL_);
- if (status < CDF_OK) stop ("18.0");
-
- if (strcmp(var1Name_out,new_var1Name) != 0) stop ("18.11");
- if (var1DataType_out != var1DataType) stop ("18.12");
- if (var1NumElements_out != var1NumElements) stop ("18.13");
- if (var1RecVariance_out != var1RecVariance) stop ("18.14");
-
- for (dim_n = 0; dim_n < numDims; dim_n++)
- if (var1DimVariances_out[dim_n] != var1DimVariances[dim_n]) stop ("18.14");
-
- if (strcmp(var2Name_out,new_var2Name) != 0) stop ("18.21");
- if (var2DataType_out != var2DataType) stop ("18.22");
- if (var2NumElements_out != var2NumElements) stop ("18.23");
- if (var2RecVariance_out != var2RecVariance) stop ("18.24");
-
- for (dim_n = 0; dim_n < numDims; dim_n++)
- if (var2DimVariances_out[dim_n] != var2DimVariances[dim_n]) stop ("18.24");
-
- /******************************************************************************
- * Rename attribute.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- ATTR_NAME_, attrName,
- PUT_, ATTR_NAME_, new_attrName,
- NULL_);
- if (status < CDF_OK) stop ("20.0");
-
- /******************************************************************************
- * Correct attribute scope.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- PUT_, ATTR_SCOPE_, new_attrScope,
- NULL_);
- if (status < CDF_OK) stop ("21.0");
-
- /******************************************************************************
- * Inquire attribute.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- GET_, ATTR_NAME_, attrName_out,
- ATTR_SCOPE_, &attrScope_out,
- ATTR_MAXENTRY_, &maxEntry_out,
- NULL_);
- if (status < CDF_OK) stop ("22.0");
-
- if (strcmp(attrName_out,new_attrName) != 0) stop ("22.1");
- if (attrScope_out != attrScope_out) stop ("22.2");
- if (maxEntry_out != entryNum) stop ("22.3");
-
- /******************************************************************************
- * Inquire attribute entry.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- ENTRY_, entryNum,
- GET_, ENTRY_DATATYPE_, &attrDataType_out,
- ENTRY_NUMELEMS_, &attrNumElements_out,
- NULL_);
- if (status < CDF_OK) stop ("23.0");
-
- if (attrDataType_out != attrDataType) stop ("23.1");
- if (attrNumElements_out != attrNumElements) stop ("23.1");
-
- /******************************************************************************
- * Get error text.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_STATUS_, CDF_OK,
- GET_, STATUS_TEXT_, errorText,
- NULL_);
- if (status < CDF_OK) stop ("24.0");
-
- printf ("%s\n", errorText);
-
- /******************************************************************************
- * Close CDF.
- ******************************************************************************/
-
- status = CDFlib (SELECT_, CDF_, id,
- CLOSE_, CDF_,
- NULL_);
- if (status < CDF_OK) stop ("25.0");
-
- /*****************************************************************************/
-
- printf ("\nTEST SUCCESSFUL\n");
- Exit;
-
- #if defined(__MSDOS__)
- return;
- #endif
- }
-